package com.zh.yqbj.util;

import java.io.File;

public class FileSizeUtil {

    // 计算文件大小，并返回带有单位的字符串
    public static String getFileSize(File file) {
        long size = getFileSizeInBytes(file);
        return formatSize(size);
    }

    // 计算文件大小（以字节为单位）
    private static long getFileSizeInBytes(File file) {
        if (file.isFile()) {
            return file.length(); // 如果是文件，直接返回文件大小
        } else {
            long size = 0;
            File[] files = file.listFiles(); // 如果是目录，遍历目录下所有文件和子目录
            if (files != null) {
                for (File f : files) {
                    size += getFileSizeInBytes(f); // 递归调用自身，累加每个文件的大小
                }
            }
            return size; // 返回目录总大小
        }
    }

    // 格式化文件大小输出
    private static String formatSize(long size) {
        if (size < 1024) {
            return size + " B"; // 如果小于1KB，直接返回字节数
        } else if (size < 1024 * 1024) {
            return String.format("%.2f KB", (double) size / 1024); // 如果小于1MB，返回KB，并保留两位小数
        } else if (size < 1024 * 1024 * 1024) {
            return String.format("%.2f MB", (double) size / (1024 * 1024)); // 如果小于1GB，返回MB，并保留两位小数
        } else {
            return String.format("%.2f GB", (double) size / (1024 * 1024 * 1024)); // 否则返回GB，并保留两位小数
        }
    }
    //格式化后的单位转回bytes long
    public static long formatSizeToBytes(String size) {
        String[] str = size.split(" ");
        long byteSize=0;
        if ("B".equals(str[1])) {
            byteSize= Long.parseLong(str[0]);
        } else if ("KB".equals(str[1])) {
            byteSize= Long.parseLong(str[0]) * 1024;
        } else if (str[1].equals("MB")) {
            byteSize= Long.parseLong(str[0]) * 1024 * 1024;
        } else if (str[1].equals("GB")) {
            byteSize= Long.parseLong(str[0]) * 1024 * 1024*1024;
        }
        return byteSize;
    }
}
